package com.painpointcloud.common.util.core;

import org.apache.commons.lang3.StringUtils;

public class Constant {

	public static final String REDIS_PREFIX = "yopark_finance_";
	

	public enum Global{
		/**
		 * 启用_1
		 */
		FLAG_Y(1),
		/**
		 * 禁用_2
		 */
		FLAG_N(2),
		
		/**
		 * 父节点_0
		 */
		PARENT_ID(0),
		;
		public int Value;
		Global(int Value){
			this.Value = Value;
		}
	}
	
	/**
	 * 权限
	 * @author kevin
	 *
	 */
	public enum ManagementCode{
		/**
		 * 数据字典key重复
		 */
		DATA_DICTIONARY_KEY_REPEAT("00002000","数据字典中已存在相同的标签"),
		
		/**
		 * flag不等于1或者2
		 */
		FLAE_ERROR("00002001","改变的状态不在指定的值范围"),
		
		/**
		 * 参数不全
		 */
		NOT_PARAM("00002002","必要参数没有填写"),
		
		/**
		 * 用户名不存在
		 */
		NOT_USER("00002003","用户名不存在"),
		
		/**
		 * 密码错误
		 */
		PWD_ERROR("00002004","密码错误"),
		
		/**
		 * 账号禁用
		 */
		DISABLE_USER("00002005","账号禁用"),
		
		/**
		 * 用户名已使用
		 */
		USER_NAME_USE("00002006","登陆用户名已使用"),
		
		/**
		 * 机构或者上级机构不存在
		 */
		NOT_COMPANY("00002007","机构或者上级机构不存在"),
		
		/**
		 * 同级机构或者同级部门或者用户溢出
		 */
		SIBLINGS_OVERFLOW("00002008","同级机构或者机构下的部门或者用户最大个数溢出"),
		
		/**
		 * 父节点没有填写
		 */
		PARENT_ID_NOT_NULL("00002009","父节点没有填写"),
		
		/**
		 * 登录名已被使用
		 */
		LOGIN_USER_NAME_USE("00002010","登录名已被使用"),
		
		/**
		 * 没有登陆
		 */
		NOT_LANDING("00002011","没有登陆"),
		
		/**
		 * 没有权限
		 */
		NOT_PRIVILEGE("00002011","没有该操作的权限"),
		;
		String code;
		String message;
		
		public String getCode() {
	        return this.code;
	    }
	    public void setCode(String code) {
	        this.code = code;
	    }
	    public String getMessage() {
	        return this.message;
	    }
	    public void setMessage(String message) {
	        this.message = message;
	    }
		
	    ManagementCode(String code,String message){
			this.code = code;
			this.message = message;
		}
		/**
		 * 返回消息
		 * @param code
		 * @return
		 */
		public static String getMessage(String code){
			if(StringUtils.isBlank(code)){
				return ResCode.N.message;
			}
			for (ResCode rc : ResCode.values()) {
		         if(code.equals(rc.getCode())){
		        	 return String.format(rc.getMessage());
		         }
		    }
			return ResCode.N.message;
		}
	}
	
	public enum ResKey{
		/**
		 * 消息主体("message")
		 */
		MESSAGE("message"),
		
		/**
		 * 返回对应编码
		 */
		CODE("code"),
		
		/**
		 * 当回数据
		 */
		DATA("data"),
		
		/**
		 * session
		 */
		USER_SESSION("user_session"),
		;
		public String Value;

		ResKey(String Value) {
			this.Value = Value;
		}
	}
	
	/**
	 * 返回正确和错误
	 * @author kevin
	 *
	 */
	public enum ResCode{
		/**
		 * 正确("00000000","请求成功")
		 */
		Y("00000000","请求成功"),
		/**
		 * 错误("00000001") 
		 */
		N("00000001","系统异常，请稍后再试"),
		;
		String code;
		String message;
		
		public String getCode() {
	        return this.code;
	    }
	    public void setCode(String code) {
	        this.code = code;
	    }
	    public String getMessage() {
	        return this.message;
	    }
	    public void setMessage(String message) {
	        this.message = message;
	    }
		
		ResCode(String code,String message){
			this.code = code;
			this.message = message;
		}
		/**
		 * 返回消息
		 * @param code
		 * @return
		 */
		public static String getMessage(String code){
			if(StringUtils.isBlank(code)){
				return ResCode.N.message;
			}
			for (ResCode rc : ResCode.values()) {
		         if(code.equals(rc.getCode())){
		        	 return String.format(rc.getMessage());
		         }
		    }
			return ResCode.N.message;
		}
	}
	
	public enum HttpDataFormat{
		
		/**
		 * access
		 */
		JSON("access"),
		
		/**
		 * 表单
		 */
		FORM_DATA("form_data"),
		
		/**
		 * 地址栏
		 */
		QUERY_STRING("query_string"),
		
		;
		public String Val;
		HttpDataFormat(String val){
			this.Val = val;
		}
	}
	
	public enum HttpTimeout{
		/**
		 * 设置连接超时时间，单位毫秒。
		 */
		CONNECT_TIMEOUT(30000),
		/**
		 * 请求获取数据的超时时间，单位毫秒。 如果访问一个接口，多少时间内无法返回数据，就直接放弃此次调用。
		 */
		SOCKET_TIMEOUT(30000),
		/**
		 * 设置从connect Manager获取Connection 超时时间，单位毫秒。这个属性是新加的属性，因为目前版本是可以共享连接池的。
		 */
		CONNECTION_REQUEST_TIMEOUT(30000),
		
		;
		public int Val;
		HttpTimeout(int val){
			this.Val = val;
		}
	}
}
